iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0

Open-Match 將 MMF 以獨立部件拆出,其中一個好處是,可以讓我們單獨對配對邏輯進行單元測試。測試這個環節在想要進入營運前,也是大家不可避免的一個環節,今天會簡單實驗一下,針對官方 demo 所提供的 MMF,進行測試與 benchmark。

Testing

由於官方提供的 MMF 是由 golang 撰寫的,今天將會以 golang 的測試工具進行測試,但如果各位打算以不同語言實作 MMF ,依然可以依照單元測試的原則,對你的 MMF 進行壓測哦~

mmf/soloduel

包含兩個測試,ticketID 是否重複,以及兩人成對的邏輯是否正確

使用 golang 執行單元測試

~ go test -v

=== RUN   TestMakeMatchesDeduplicate
--- PASS: TestMakeMatchesDeduplicate (0.00s)
=== RUN   TestMakeMatches
--- PASS: TestMakeMatches (0.00s)
PASS
ok      github.com/WeiWeiWesley/open-match/examples/functions/golang/soloduel/mmf       0.015s

Benchmark

同樣使用 mmf/soloduel,但加上筆者提供的 test code 執行效能測試。

test code

func BenchmarkMakeMatches(b *testing.B) {
	for i := 0; i < b.N; i++ {

		poolNameToTickets, ticketsCount := requestCreator()
		equal := int(ticketsCount / 2) //期望總組數

		matches, err := makeMatches(poolNameToTickets)
		if err != nil {
			b.Error(err)
		}

		if len(matches) != equal {
			b.Errorf("should create total num of %d matches but got %d", equal, len(matches))
		}

		for _, match := range matches {
			if len(match.Tickets) != 2 {
				b.Error("match.Tickets count err")
			}

			if match.MatchFunction != matchName {
				b.Error("matchName err")
			}
		}
	}
}

//隨機產生請求
func requestCreator() (map[string][]*pb.Ticket, int) {
	poolNum := rand.Intn(9) + 1 // random numbers of pools 1~10
	poolNameToTickets := map[string][]*pb.Ticket{}

	ticketCount := 1
	for i := 0; i < poolNum; i++ {
		aPoolTicketNum := rand.Intn(99) + 1 // random numbers of tickets 1~100
		poolName := fmt.Sprintf("pool%d", i)

		for j := 0; j < aPoolTicketNum; j++ {
			poolNameToTickets[poolName] = append(poolNameToTickets[poolName], &pb.Ticket{
				Id: fmt.Sprintf("%d", ticketCount),
			})
		}
	}

	return poolNameToTickets, ticketCount - 1
}

使用 golang 執行效能測試

結果可以看出,mmf/soloduel 可以在每秒執行 25,842次,平均單次執行時間為 47,391 ns

~ go test -v -bench=. -run=none .

goos: darwin
goarch: amd64
pkg: github.com/WeiWeiWesley/open-match/examples/functions/golang/soloduel/mmf
cpu: Intel(R) Core(TM) i5-7267U CPU @ 3.10GHz
BenchmarkMakeMatches
BenchmarkMakeMatches-4             25842             47391 ns/op
PASS
ok      github.com/WeiWeiWesley/open-match/examples/functions/golang/soloduel/mmf       1.727s

上一篇
Day24 生產環境需要注意的部分
下一篇
Day26 玩家技巧、階級與配對關係
系列文
徵坦補! 新手可! Open-Match 配對框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言